package com.wyp168.leetcode;

/**
 * @ClassName CanConstruct
 * @Description TODO
 * @Author wyp168
 * @Date 2022/7/1 16:30
 */
public class CanConstruct {
    public static void main(String[] args) {
        System.out.println(canConstruct("abc", "abcde"));
    }

    /**
     * 给你两个字符串：ransomNote 和 magazine ，判断 ransomNote 能不能由 magazine 里面的字符构成。
     *                                      （判断 magazine 是否包含 ransomNote 字符串）
     * 如果可以，返回 true ；否则返回 false 。
     *
     * magazine 中的每个字符只能在 ransomNote 中使用一次。
     *
     */
    public static int canConstruct(String needle, String haystack) {
        //String haystack, String needle
        if (needle.length() > haystack.length()) {
            return -1;
        }
        //转换成字符数组
        char[] rc = needle.toCharArray();
        char[] mc = haystack.toCharArray();
        //记录短字符串指针
        int rIndex = 0;
        //记录长字符串指针
        int mIndex = 0;

        while (mIndex <= haystack.length() - needle.length()) {
            int mIndexTemp = mIndex;
            while (rc[rIndex] == mc[mIndexTemp]) {
                rIndex ++;
                mIndexTemp ++;
                if (rIndex == rc.length || mIndexTemp == mc.length) {
                    break;
                }
            }

            if (rIndex == rc.length) {
                return mIndex;
            } else {
                rIndex = 0;
                mIndex ++;
            }
        }

        return -1;
    }
}
